package cn.qingyun.gis.modules.scenes.service;

import cn.qingyun.gis.modules.scenes.entity.PoiChannelModel;
import cn.qingyun.gis.modules.scenes.entity.PoiScenario;
import cn.qingyun.gis.modules.scenes.entity.PoiScenarioChannel;
import cn.qingyun.gis.modules.scenes.request.PoiListRequest;
import cn.qingyun.gis.modules.scenes.request.PoiNumberInfoRequest;
import cn.qingyun.gis.modules.scenes.request.QueryByWordRequest;
import cn.qingyun.gis.modules.scenes.response.PoiListResponse;
import cn.qingyun.gis.modules.scenes.response.PoiNumberInfoResponse;
import cn.qingyun.gis.modules.scenes.response.UnFollowPoiDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author guest
 * @since 2024-06-13
 */
public interface IPoiScenarioChannelService extends IService<PoiScenarioChannel> {
    /**
     * 根据直销/自有人员工号 查询关联的poi信息
     */
    IPage<PoiListResponse> selectPagePoiByPhone(IPage<PoiScenario> poiIPage, PoiListRequest request);

    /**
     * 根据角色权限查询poi信息
     * @param poiIPage
     * @param request
     * @return
     */
    IPage<PoiListResponse> selectPagePoiCommon(IPage<?> poiIPage, PoiListRequest request,String table);

    /**
     * 根据角色权限查询poi信息
     * @param poiIPage
     * @param request
     * @param table
     * @param leve
     * @return
     */
    IPage<PoiListResponse> selectPagePoiCommonNew(IPage<?> poiIPage, PoiListRequest request,String table,Integer leve);
    List<PoiListResponse> selectPoiLikeCommon(QueryByWordRequest request,String table);

    /**
     * 关键字搜索接口改造
     * @param request
     * @param table
     * @param level
     * @return
     */
    List<PoiListResponse> selectPoiLikeCommonNew(QueryByWordRequest request,String table,Integer level);

    /**
     * 关键字搜索  查询关联的poi信息
     */
    List<PoiListResponse> selectPoiByPhone(QueryByWordRequest request);

    /**
     * 关键字查询（直销/自有人员）
     */
    int selectCountByPhone(String phone, String channelCode);

    /**
     * 判断自有、直销人员
     * @param phone 工号
     * @param type 类型
     * @param table 类型
     * @return 返回值
     */
    int selectCountByTelNum(String phone,Integer type,String table);

    /**
     * 判断库里是否有值
     * @param table
     * @param channelCode
     * @return
     */
    int selectCountByChannelCode(String table,String channelCode);

    /**
     *
     * @param list
     * @param table
     * @return
     */
    int insertOrUpdateByPoiId(List<?> list,String table);

    /**
     * 统计责任人个数
     * @param poiNumberInfoRequest
     * @param tables
     * @return
     */
    int selectPoiNumberInfoCount(PoiNumberInfoRequest poiNumberInfoRequest,List<String> tables,Integer level);
    /**
     * 统计责任人个数
     * @param poiNumberInfoRequest
     * @param table
     * @return
     */
    int selectPoiNumberInfoCountSub(PoiNumberInfoRequest poiNumberInfoRequest,String table,Integer level);

    /**
     * 责任人列表查询
     * @param poiNumberInfoRequest
     * @param tables
     * @param level
     * @return
     */
    List<PoiNumberInfoResponse> selectPoiNumberInfoPage(PoiNumberInfoRequest poiNumberInfoRequest,List<String> tables,Integer level);
    /**
     * 责任人列表查询--无分页
     * @param poiNumberInfoRequest
     * @param tables
     * @param level
     * @return
     */
    List<PoiNumberInfoResponse> selectPoiNumberInfoPageSub(PoiNumberInfoRequest poiNumberInfoRequest,List<String> tables,Integer level);

    /**
     * 统计poi_scenario_channel表里存在列表中的个数
     * @param list
     * @return
     */
    int selectCount(List<String> list);

    /**
     * 校验poiId在表里是否存在
     * @param poiIdList
     * @return
     */
    List<String> hasExistPoiId(List<String> poiIdList);


    /**
     * 查询渠道、自有、直销人员的
     * @param channelCode 渠道码
     * @param zxNumber 直销工号
     * @param zyNumber 自有工号
     * @param table 表
     * @return 返回网格码
     */
    UnFollowPoiDto selectGridCode(String channelCode, String zxNumber, String zyNumber, String table);

    /**
     * 查询自有直销权限
     * @param channelCode
     * @param zxNumber
     * @param zyNumber
     * @param table
     * @return
     */
    List<UnFollowPoiDto> selectGridCodeList(String channelCode, String zxNumber, String zyNumber, String table);

    /**
     * 校验是否是建筑数据
     *
     * @param poiChannelModels
     * @return
     */
    List<String> isBuildPoiId(List<PoiChannelModel> poiChannelModels);

    /**
     * 判断是否有归属建筑
     *
     * @param poiChannelModels
     * @return
     */
    List<PoiChannelModel> hasExistBuildPoiId(List<PoiChannelModel> poiChannelModels);
}
